package com.zr.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.zr.model.User;
import com.zr.util.JDBCUtil;

/**
 * 创建用户登录使用的dao层
 * @author Administrator
 *
 */
public class UserDao {
	/**
	 * 查询到用户的用户名和密码
	 * @param user 传入用户
	 * @return 有则返回true
	 */
	public boolean validateUser(User user) {
		boolean  flag = false;
  	  String sql  = "select * from user where uname=? and upsw=?";
  	  Connection   con  =  JDBCUtil.getJDBConnection();
  	  try {
			PreparedStatement  pst = con.prepareStatement(sql);
			pst.setString(1, user.getUname());
			pst.setString(2, user.getUpsw());
			ResultSet  rs  = pst.executeQuery();
			if(rs.next()){
				flag = true;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			JDBCUtil.closedConnection(con);
		}
  	  
  	  
  	  return flag;
	}
	/**
	 * 查询到一个用户的用户名和密码
	 * @param user 传入用户
	 * @return 返回查到的用户
	 */
		public  User getOneUser(User user){
				User currentTeacher  = new User();
	    	  String sql  = "select * from user  where uname=? and upsw=?";
	      	  Connection   con  =  JDBCUtil.getJDBConnection();
	      	  try {
	  			PreparedStatement  pst = con.prepareStatement(sql);
	  			pst.setString(1, user.getUname());
	  			pst.setString(2, user.getUpsw());
	  			ResultSet  rs  = pst.executeQuery();
	  			if(rs.next()){
	  				currentTeacher.setUid(rs.getInt("uid"));
	  				currentTeacher.setUid(rs.getInt("aid"));
	  				currentTeacher.setUid(rs.getInt("sid"));
	  				currentTeacher.setUid(rs.getInt("tid"));
	  				currentTeacher.setUname(rs.getString("uname"));
	  				currentTeacher.setUpsw(rs.getString("upsw"));
	  			}
	  		} catch (SQLException e) {
	  			// TODO Auto-generated catch block
	  			e.printStackTrace();
	  		}finally{
	  			JDBCUtil.closedConnection(con);
	  		}
	    	    return  currentTeacher;
	    }
		/**
		 * 检验当前用户用户名是否存在
		 * @param uname 传入当前用户的用户名
		 * @return 有则返回true
		 */
		public  boolean validataUname(String uname){
	    	   boolean  flag = false;
	    	   String sql  = "select uid from user where uname=?";
	    	   Connection   con  =  JDBCUtil.getJDBConnection();
	    	   try {
				PreparedStatement  pst = con.prepareStatement(sql);
				pst.setString(1,uname);
				ResultSet  rs = pst.executeQuery();
				if(rs.next()){
					flag = true;
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	    	   
	    	   return flag;
	       }
			/**
			 * 查询所有用户的信息  分页显示
			 * @param start  起始的位置
			 * @param rows   分页的记录数
			 * @return
			 */
		    public List<User>  findAllUser(int start,int rows){
		    	//实例化一个User的集合对象
				List<User>  users = new ArrayList<User>();	
				//查询所有用户信息的sql语句
				StringBuffer str = new StringBuffer("SELECT arole role,uid,uname,upsw,user.aid,user.tid,user.sid,aname name,aage age,asex sex from user");
				str.append(" INNER JOIN admin where  user.aid=admin.aid UNION");
				str.append(" SELECT trole role,uid,uname,upsw,user.aid,user.tid,user.sid,tname name,tage age,tsex sex from user");
				str.append(" INNER JOIN teacher where  user.tid=teacher.tid UNION");
				str.append(" SELECT srole role,uid,uname,upsw,user.aid,user.tid,user.sid,sname name,sage age,ssex sex from user");
				str.append(" INNER JOIN student where  user.sid=student.sid limit ?,?");
				//连接数据库	
				Connection  con =  JDBCUtil.getJDBConnection();
				try {
					//获取预编译
					PreparedStatement  pst = con.prepareStatement(str.toString());
					pst.setInt(1,start);
					pst.setInt(2,rows);
					//获取结果集
					ResultSet  rs = pst.executeQuery();
					//循环结果
					while(rs.next()){
						User  s = new User();
						s.setRole(rs.getString("role"));
						s.setUid(rs.getInt("uid"));
						s.setUname(rs.getString("uname"));
						s.setUpsw(rs.getString("upsw"));
                        s.setAid(rs.getInt("aid"));
                        s.setTid(rs.getInt("tid"));
                        s.setSid(rs.getInt("sid"));
					    s.setName(rs.getString("name"));
					    s.setAge(rs.getInt("age"));
					    s.setSex(rs.getString("sex"));
	                    users.add(s);
					}
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}finally{
					//关闭数据库连接
					JDBCUtil.closedConnection(con);
				}
				return  users;
			}
		/**
		 * 查询所有用户总数
		 * @return  所有学生总数
		 */
		public int  findAllUserCount(){
			//定义一个scount （用户总数）
			int scount = 0;
			//查询所有用户总数的sql语句
			String sql = "select count(uid) scount from user";
			//连接数据库
			Connection  con =  JDBCUtil.getJDBConnection();
			try {
				//获取预编译
				PreparedStatement  pst = con.prepareStatement(sql);
				//获取结果集
				ResultSet  rs = pst.executeQuery();
				//循环结果
				if(rs.next()){
					scount = rs.getInt("scount");
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				//关闭数据库连接
				JDBCUtil.closedConnection(con);
			}
			return  scount;
		}
		
		/**
		 * 删除管理员的方法
		 * @param aid 
		 * @return 返回0 删除成功 返回1 删除失败
		 */
			public int  delAdminByaid(int aid){
				//定义一个s 
				int s = 0;
				//删除所有用户总数的sql语句
				String sql = "delete from user where aid=?;delete from admin where aid=?";
				//连接数据库
				Connection  con =  JDBCUtil.getJDBConnection();
				try {
					//获取预编译
					PreparedStatement  pst = con.prepareStatement(sql);
					//获取结果集
					pst.setInt(1, aid);
					int i  = pst.executeUpdate();
					//循环结果
					if(i>0){
						s=1;
					}
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}finally{
					//关闭数据库连接
					JDBCUtil.closedConnection(con);
				}
				return  s;
			}
			/**
			 * 删除老师的方法
			 * @param tid 
			 * @return 返回0 删除成功 返回1 删除失败
			 */
				public int  delTeacherBytid(int tid){
					//定义一个s 
					int s = 0;
					//删除所有用户总数的sql语句
					String sql = "delete from user where tid=?;delete from teacher where tid =?";
					//连接数据库
					Connection  con =  JDBCUtil.getJDBConnection();
					try {
						//获取预编译
						PreparedStatement  pst = con.prepareStatement(sql);
						//获取结果集
						pst.setInt(1, tid);
						int i  = pst.executeUpdate();
						//循环结果
						if(i>0){
							s=1;
						}
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}finally{
						//关闭数据库连接
						JDBCUtil.closedConnection(con);
					}
					return  s;
				}
				/**
				 * 删除学生的方法
				 * @param sid 
				 * @return 返回0 删除成功 返回1 删除失败
				 */
					public int  delStudentBysid(int sid){
						//定义一个s 
						int s = 0;
						//删除所有用户总数的sql语句
						String sql = "delete from user where sid=?;delete from admin where sid=?";
						//连接数据库
						Connection  con =  JDBCUtil.getJDBConnection();
						try {
							//获取预编译
							PreparedStatement  pst = con.prepareStatement(sql);
							//获取结果集
							pst.setInt(1, sid);
							int i  = pst.executeUpdate();
							//循环结果
							if(i>0){
								s=1;
							}
						} catch (SQLException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}finally{
							//关闭数据库连接
							JDBCUtil.closedConnection(con);
						}
						return  s;
					}
			/**
			 * 提供增加管理员的方法
			 * @param admin 传入需要增加的管理员的id
			 * @return 增加成功返回true
			 */
			public boolean addUserAdmin(User admin){
				//默认返回false
				boolean flag = false;
				//添加所有用户总数的sql语句
				String sql = "CALL adduser_admin(?,?,?,?,?,?)";
				//连接数据库
				Connection  con =  JDBCUtil.getJDBConnection();
				try {
					//获取预编译
					PreparedStatement  pst = con.prepareStatement(sql);
					//获取结果集
					pst.setString(1, admin.getRole());
					pst.setString(2, admin.getUname());
					pst.setString(3, admin.getUpsw());
					pst.setString(4,admin.getName());
					pst.setInt(5,admin.getAge());
					pst.setString(6,admin.getSex());
					int i  = pst.executeUpdate();
					//循环结果
					if(i>0){
						flag=true;
					}
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}finally{
					//关闭数据库连接
					JDBCUtil.closedConnection(con);
				}
				return flag;
			}
			/**
			 * 提供增加老师的方法
			 * @param teacher 传入需要增加的老师
			 * @return 增加成功返回true
			 */
			public boolean addUserStudent(User student){
				//默认返回false
				boolean flag = false;
				//添加所有用户总数的sql语句
				String sql = "CALL adduser_student(?,?,?,?,?,?)";
				//连接数据库
				Connection  con =  JDBCUtil.getJDBConnection();
				try {
					//获取预编译
					PreparedStatement  pst = con.prepareStatement(sql);
					//获取结果集
					pst.setString(1, student.getRole());
					pst.setString(2, student.getUname());
					pst.setString(3, student.getUpsw());
					pst.setString(4,student.getName());
					pst.setInt(5,student.getAge());
					pst.setString(6,student.getSex());
					int i  = pst.executeUpdate();
					//循环结果
					if(i>0){
						flag=true;
					}
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}finally{
					//关闭数据库连接
					JDBCUtil.closedConnection(con);
				}
				return flag;
			}
			/**
			 * 提供增加学生的方法
			 * @param student 传入需要增加的学生
			 * @return 增加成功返回true
			 */
			public boolean addUserTeacher(User teacher){
				//默认返回false
				boolean flag = false;
				//添加所有用户总数的sql语句
				String sql = "CALL adduser_teacher(?,?,?,?,?,?)";
				//连接数据库
				Connection  con =  JDBCUtil.getJDBConnection();
				try {
					//获取预编译
					PreparedStatement  pst = con.prepareStatement(sql);
					//获取结果集
					pst.setString(1, teacher.getRole());
					pst.setString(2, teacher.getUname());
					pst.setString(3, teacher.getUpsw());
					pst.setString(4,teacher.getName());
					pst.setInt(5,teacher.getAge());
					pst.setString(6,teacher.getSex());
					int i  = pst.executeUpdate();
					//循环结果
					if(i>0){
						flag=true;
					}
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}finally{
					//关闭数据库连接
					JDBCUtil.closedConnection(con);
				}
				return flag;
			}
			/** 
			 * 提供修改用户信息的方法
			 * @param user 传入需要修改的用户对象
			 * @return 成功修改返回true
			 */
				public boolean updateUser(User user){
					//默认返回false
					boolean flag = false;
					//修改所有用户总数的sql语句
					String sql = "";
					//连接数据库
					Connection  con =  JDBCUtil.getJDBConnection();
					try {
						//获取预编译
						PreparedStatement pst = con.prepareStatement(sql);
						//获取结果集
						pst.setString(1, user.getRole());
						pst.setString(2, user.getUname());
						pst.setString(3, user.getUpsw());
						pst.setString(4,user.getName());
						pst.setInt(5,user.getAge());
						pst.setString(6,user.getSex());
						int rs = pst.executeUpdate();
						//循环结果
						if(rs>0){
							flag = true;
						}
						
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}finally{
						//关闭数据库
						JDBCUtil.closedConnection(con);
					}
					return flag;
					
				}
				/** 
				 * 搜索用户类型的总 数
				 * @param value 传入搜索关键字
				 * @return
				 */
				public int searchUserCount(String value){
					//定义一个scount 
					int scount=0;
				     // 搜索用户类型总数的sql语句
					String sql="???";
					//连接数据库
					Connection con = JDBCUtil.getJDBConnection();
					//获取预编译
					PreparedStatement pst;
					try {
						pst = con.prepareStatement(sql);
						//获取结果集
						pst.setString(1, value);
						pst.setString(2, value);
						ResultSet rs = pst.executeQuery();
						//循环结果
						if(rs.next()){
							scount = rs.getInt("scount");
						}
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}finally{
						//关闭数据库
						JDBCUtil.closedConnection(con);
					}
					
					return scount;
					
				}
				/** 
				 * 搜索用户类型的方法 
				 * @param start 
				 * @param rows
				 * @param value 传入搜索的关键字
				 * @return 返回课程
				 */
				public List<User> searchUserRole(String value){
					//实例化一个user的集合对象
					List<User> uservalue = new ArrayList<User>();
					//搜索用户类型方法的sql语句
					String Sql = "????";
					//连接数据库
					Connection  con =  JDBCUtil.getJDBConnection();
					try {
						//获取预编译
						PreparedStatement pst = con.prepareStatement(Sql);
						//循环结果集
						pst.setString(1, value);
						pst.setString(2, value);
						ResultSet rs = pst.executeQuery();
						//循环结果
						while(rs.next()){
							User  role = new User();
							role.setRole(rs.getString("role"));
							role.setUid(rs.getInt("uid"));
							role.setUname(rs.getString("uname"));
							role.setUpsw(rs.getString("upsw"));
							role.setAid(rs.getInt("aid"));
							role.setTid(rs.getInt("tid"));
							role.setSid(rs.getInt("sid"));
							role.setName(rs.getString("name"));
							role.setAge(rs.getInt("age"));
							role.setSex(rs.getString("sex"));
						    uservalue.add(role);
						}
						
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}finally{
						//关闭数据库
						JDBCUtil.closedConnection(con);
					}		
					return uservalue;			
				}
				
			}		
		
	
			

